<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::session::shm::classic::Session_mv&lt; Session_t &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Public API.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session.html">session</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session_1_1shm.html">shm</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1session_1_1shm_1_1classic.html">classic</a></li><li class="navelem"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::session::shm::classic::Session_mv&lt; Session_t &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>Implements the SHM-related API common to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> and <a class="el" href="namespaceipc_1_1session_1_1shm_1_1classic.html#ac6c443a72e0f22710c83bb1e8c229618" title="This is to session::Client_session what shm::classic::Server_session is to session::Server_session.">shm::classic::Client_session</a>.  
 <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#details">More...</a></p>

<p><code>#include &lt;session.hpp&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ipc::session::shm::classic::Session_mv&lt; Session_t &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv__inherit__graph.svg" width="374" height="83"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:ac11498f4b8a526f2525de8e3d2dcf08c"><td class="memItemLeft" align="right" valign="top"><a id="ac11498f4b8a526f2525de8e3d2dcf08c" name="ac11498f4b8a526f2525de8e3d2dcf08c"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>Base</b> = Session_t</td></tr>
<tr class="memdesc:ac11498f4b8a526f2525de8e3d2dcf08c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for our base class. To the user: note its <code>public</code> API is inherited. <br /></td></tr>
<tr class="separator:ac11498f4b8a526f2525de8e3d2dcf08c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07c9b1803567c2714ae48433e756047f"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a> = typename Base::Base::Impl::Arena</td></tr>
<tr class="memdesc:a07c9b1803567c2714ae48433e756047f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The arena object on which one may call <code>construct&lt;T&gt;(ctor_args...)</code>, where <code>ctor_args</code> are arguments to the <code>T::T()</code> constructor.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">More...</a><br /></td></tr>
<tr class="separator:a07c9b1803567c2714ae48433e756047f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb1fceac476bc8bd159710b7d01f0fe3"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:aeb1fceac476bc8bd159710b7d01f0fe3"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aeb1fceac476bc8bd159710b7d01f0fe3">Allocator</a> = <a class="el" href="classipc_1_1shm_1_1stl_1_1Stateless__allocator.html">ipc::shm::stl::Stateless_allocator</a>&lt; T, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a> &gt;</td></tr>
<tr class="memdesc:aeb1fceac476bc8bd159710b7d01f0fe3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience alias to be used in STL-compliant <code>T</code>s with <code>"Arena::construct&lt;T&gt;()"</code>, our own <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object&lt;T&gt;()</a>, and <code>"Arena::lend_object&lt;T&gt;()"</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aeb1fceac476bc8bd159710b7d01f0fe3">More...</a><br /></td></tr>
<tr class="separator:aeb1fceac476bc8bd159710b7d01f0fe3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aecfab9c96933a832be7d2ad91be33532"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:aecfab9c96933a832be7d2ad91be33532"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aecfab9c96933a832be7d2ad91be33532">Borrower_allocator</a> = <a class="el" href="classipc_1_1shm_1_1stl_1_1Stateless__allocator.html">ipc::shm::stl::Stateless_allocator</a>&lt; T, <a class="el" href="namespaceipc_1_1shm.html#a6c8474d5b7dda220ed1f6693fc2e3c89">ipc::shm::Arena_to_borrower_allocator_arena_t</a>&lt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a> &gt; &gt;</td></tr>
<tr class="memdesc:aecfab9c96933a832be7d2ad91be33532"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equals <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aeb1fceac476bc8bd159710b7d01f0fe3" title="Convenience alias to be used in STL-compliant Ts with &quot;Arena::construct&lt;T&gt;()&quot;, our own lend_object&lt;T&gt;...">Allocator</a>; provided for generic programming for algorithms that would use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">classic::Session_mv</a> interchangeably with <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html" title="Implements the SHM-related API common to shm::arena_lend::jemalloc::Server_session and shm::arena_len...">shm::arena_lend::jemalloc::Session_mv</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aecfab9c96933a832be7d2ad91be33532">More...</a><br /></td></tr>
<tr class="separator:aecfab9c96933a832be7d2ad91be33532"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a96f6b597be7cc29f9207df909a4816c4"><td class="memTemplParams" colspan="2">template&lt;typename Message_body &gt; </td></tr>
<tr class="memitem:a96f6b597be7cc29f9207df909a4816c4"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a96f6b597be7cc29f9207df909a4816c4">Structured_channel</a> = typename <a class="el" href="namespaceipc_1_1transport_1_1struc_1_1shm_1_1classic.html#ac543b500a85f556564e592cbbefb6185">transport::struc::shm::classic::Channel</a>&lt; typename Base::Base::Impl::Session_base_obj::Channel_obj, Message_body &gt;</td></tr>
<tr class="memdesc:a96f6b597be7cc29f9207df909a4816c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a96f6b597be7cc29f9207df909a4816c4">More...</a><br /></td></tr>
<tr class="separator:a96f6b597be7cc29f9207df909a4816c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23d60bbc945c72cd6f19fdadd7ce014d"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">Structured_msg_builder_config</a> = typename Base::Base::Impl::Structured_msg_builder_config</td></tr>
<tr class="memdesc:a23d60bbc945c72cd6f19fdadd7ce014d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">More...</a><br /></td></tr>
<tr class="separator:a23d60bbc945c72cd6f19fdadd7ce014d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b27e91465c5dbdefcb12a6913a9ad4c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">Structured_msg_reader_config</a> = typename Base::Base::Impl::Structured_msg_reader_config</td></tr>
<tr class="memdesc:a2b27e91465c5dbdefcb12a6913a9ad4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">More...</a><br /></td></tr>
<tr class="separator:a2b27e91465c5dbdefcb12a6913a9ad4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ca151e694dc819205aff5995c16ba76"><td class="memItemLeft" align="right" valign="top"><a id="a3ca151e694dc819205aff5995c16ba76" name="a3ca151e694dc819205aff5995c16ba76"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>Blob</b> = typename Base::Base::Impl::Blob</td></tr>
<tr class="memdesc:a3ca151e694dc819205aff5995c16ba76"><td class="mdescLeft">&#160;</td><td class="mdescRight">Alias for a light-weight blob used in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a>. <br /></td></tr>
<tr class="separator:a3ca151e694dc819205aff5995c16ba76"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a9ff21b10fd753fccfa4882834e677ccf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf">session_shm</a> ()</td></tr>
<tr class="memdesc:a9ff21b10fd753fccfa4882834e677ccf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns SHM <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> with per-session-scope, meaning it shall be accessible only during the lifetime of this session, by this <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> (via this accessor) and the opposing <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> (via its counterpart thereof).  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf">More...</a><br /></td></tr>
<tr class="separator:a9ff21b10fd753fccfa4882834e677ccf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6a4f1fbafb583f37d7586c6a199430f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f">app_shm</a> ()</td></tr>
<tr class="memdesc:ac6a4f1fbafb583f37d7586c6a199430f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns SHM <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> with per-app scope, meaning its pool shall be accessible potentially beyond the lifetime of this session but rather until the generating <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a> (i.e., server process) shuts down, by any <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> under that umbrella, now or in the future, as long as its <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> equals that of <code>*this</code> session.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f">More...</a><br /></td></tr>
<tr class="separator:ac6a4f1fbafb583f37d7586c6a199430f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a794f83a8111428b3b1feec7216f692dd"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a794f83a8111428b3b1feec7216f692dd"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3ca151e694dc819205aff5995c16ba76">Blob</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd">lend_object</a> (const typename Arena::template Handle&lt; T &gt; &amp;handle)</td></tr>
<tr class="memdesc:a794f83a8111428b3b1feec7216f692dd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an owner process to the owner set of the given <code>session_shm-&gt;construct()</code>- or <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a>-&gt;construct()</code>-created handle, and returns an opaque blob, such that if one passes it to opposing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">Session_mv::borrow_object()</a> in the receiving process, that <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a></code> shall return an equivalent <code>Handle</code> in that process.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd">More...</a><br /></td></tr>
<tr class="separator:a794f83a8111428b3b1feec7216f692dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4223fc944735adb6946a9d1938d06a20"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4223fc944735adb6946a9d1938d06a20"><td class="memTemplItemLeft" align="right" valign="top">Arena::template Handle&lt; T &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20">borrow_object</a> (const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3ca151e694dc819205aff5995c16ba76">Blob</a> &amp;serialization)</td></tr>
<tr class="memdesc:a4223fc944735adb6946a9d1938d06a20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Completes the cross-process operation begun by oppsing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">Session_mv::lend_object()</a> that returned <code>serialization</code>; to be invoked in the intended new owner process which is operating <code>*this</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20">More...</a><br /></td></tr>
<tr class="separator:a4223fc944735adb6946a9d1938d06a20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85bb0b948b7b54c06557edd3d03d66bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">Structured_msg_builder_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a85bb0b948b7b54c06557edd3d03d66bd">session_shm_builder_config</a> ()</td></tr>
<tr class="memdesc:a85bb0b948b7b54c06557edd3d03d66bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns builder config suitable for capnp-serializing out-messages in SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a85bb0b948b7b54c06557edd3d03d66bd">More...</a><br /></td></tr>
<tr class="separator:a85bb0b948b7b54c06557edd3d03d66bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3af67219e611f450402824e5b8b162d6"><td class="memItemLeft" align="right" valign="top">Structured_msg_builder_config::Builder::Session&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3af67219e611f450402824e5b8b162d6">session_shm_lender_session</a> ()</td></tr>
<tr class="memdesc:a3af67219e611f450402824e5b8b162d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">When transmitting items originating in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> via <a class="el" href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder.html#a7909a2d1e1d24037fb8af5338fffa783" title="Implements concept API.">transport::struc::shm::Builder::emit_serialization()</a> (and/or <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">transport::struc::Channel</a> send facilities), returns additional-to-payload information necessary to target the opposing process properly.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3af67219e611f450402824e5b8b162d6">More...</a><br /></td></tr>
<tr class="separator:a3af67219e611f450402824e5b8b162d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e73c65e57a4de3811613763da3c628b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">Structured_msg_reader_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9e73c65e57a4de3811613763da3c628b">session_shm_reader_config</a> ()</td></tr>
<tr class="memdesc:a9e73c65e57a4de3811613763da3c628b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reader config counterpart to the opposing <code>Session::session_shm_builder_config()</code> and <code>Session::session_shm_lender_session()</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9e73c65e57a4de3811613763da3c628b">More...</a><br /></td></tr>
<tr class="separator:a9e73c65e57a4de3811613763da3c628b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fbea0563835e852069cdaab506dd92c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">Structured_msg_builder_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c">app_shm_builder_config</a> ()</td></tr>
<tr class="memdesc:a0fbea0563835e852069cdaab506dd92c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a85bb0b948b7b54c06557edd3d03d66bd" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena session_shm().">session_shm_builder_config()</a> but backed by SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> instead of <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c">More...</a><br /></td></tr>
<tr class="separator:a0fbea0563835e852069cdaab506dd92c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b7540b33fcedeaba37a3fece1bdec7a"><td class="memItemLeft" align="right" valign="top">Structured_msg_builder_config::Builder::Session&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0b7540b33fcedeaba37a3fece1bdec7a">app_shm_lender_session</a> ()</td></tr>
<tr class="memdesc:a0b7540b33fcedeaba37a3fece1bdec7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">When transmitting items originating in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> via <a class="el" href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder.html#a7909a2d1e1d24037fb8af5338fffa783" title="Implements concept API.">transport::struc::shm::Builder::emit_serialization()</a> (and/or <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">transport::struc::Channel</a> send facilities), returns additional-to-payload information necessary to target the opposing process properly.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0b7540b33fcedeaba37a3fece1bdec7a">More...</a><br /></td></tr>
<tr class="separator:a0b7540b33fcedeaba37a3fece1bdec7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaeeacd92acfefb73ed9af3ef22917f14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">Structured_msg_reader_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aaeeacd92acfefb73ed9af3ef22917f14">app_shm_reader_config</a> ()</td></tr>
<tr class="memdesc:aaeeacd92acfefb73ed9af3ef22917f14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reader config counterpart to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c" title="Identical to session_shm_builder_config() but backed by SHM arena app_shm() instead of session_shm().">app_shm_builder_config()</a>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aaeeacd92acfefb73ed9af3ef22917f14">More...</a><br /></td></tr>
<tr class="separator:aaeeacd92acfefb73ed9af3ef22917f14"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:aea882d38a00f81a98d6604e300c5a01a"><td class="memTemplParams" colspan="2">template&lt;typename Session_t &gt; </td></tr>
<tr class="memitem:aea882d38a00f81a98d6604e300c5a01a"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aea882d38a00f81a98d6604e300c5a01a">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt; &amp;val)</td></tr>
<tr class="memdesc:aea882d38a00f81a98d6604e300c5a01a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">Session_mv</a></code> to the given <code>ostream</code>.  <a href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aea882d38a00f81a98d6604e300c5a01a">More...</a><br /></td></tr>
<tr class="separator:aea882d38a00f81a98d6604e300c5a01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename Session_t&gt;<br />
class ipc::session::shm::classic::Session_mv&lt; Session_t &gt;</div><p >Implements the SHM-related API common to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> and <a class="el" href="namespaceipc_1_1session_1_1shm_1_1classic.html#ac6c443a72e0f22710c83bb1e8c229618" title="This is to session::Client_session what shm::classic::Server_session is to session::Server_session.">shm::classic::Client_session</a>. </p>
<p >It is, as of this writing, not to be instantiated by itself. Rather see <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> (and <a class="el" href="namespaceipc_1_1session_1_1shm_1_1classic.html#ac6c443a72e0f22710c83bb1e8c229618" title="This is to session::Client_session what shm::classic::Server_session is to session::Server_session.">shm::classic::Client_session</a>) regarding what to actually instantiate and further context. As for the API in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">Session_mv</a> itself, it is quite critical. <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> doc header explains the background. Member doc headers formally document those members given that background. <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> doc header is particularly useful.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Session_t</td><td>Class for us to <code>public</code>ly sub-class: <code><a class="el" href="classipc_1_1session_1_1Server__session__mv.html" title="Implements Session concept on the Server_app end: a Session that is emitted in almost-PEER state by l...">Server_session_mv</a>&lt;...&gt;</code> or <code><a class="el" href="classipc_1_1session_1_1Client__session__mv.html" title="Implements Session concept on the Client_app end: a Session_mv that first achieves PEER state by conn...">Client_session_mv</a>&lt;...&gt;</code>. Note its <code>public</code> API is inherited. See the relevant class template's doc header. </td></tr>
  </table>
  </dd>
</dl>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="aeb1fceac476bc8bd159710b7d01f0fe3" name="aeb1fceac476bc8bd159710b7d01f0fe3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb1fceac476bc8bd159710b7d01f0fe3">&#9670;&nbsp;</a></span>Allocator</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Allocator =  <a class="el" href="classipc_1_1shm_1_1stl_1_1Stateless__allocator.html">ipc::shm::stl::Stateless_allocator</a>&lt;T, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a>&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Convenience alias to be used in STL-compliant <code>T</code>s with <code>"Arena::construct&lt;T&gt;()"</code>, our own <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object&lt;T&gt;()</a>, and <code>"Arena::lend_object&lt;T&gt;()"</code>. </p>
<p >With SHM-classic it may also be used on the borrower side with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object&lt;T&gt;()</a> and <code>"Arena::borrow_object&lt;T&gt;()"</code>.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aecfab9c96933a832be7d2ad91be33532" title="Equals Allocator; provided for generic programming for algorithms that would use classic::Session_mv ...">Borrower_allocator</a> and contrasting type pair <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html#abbb009e31853d3222a1614535ce401b7" title="Convenience alias to be used in STL-compliant Ts with &quot;Arena::construct&lt;T&gt;()&quot;, our own lend_object&lt;T&gt;...">arena_lend::jemalloc::Session_mv::Allocator</a>, <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html#ae32bce4c9889325f38d7d6f902efe4e8" title="Convenience alias to be used in STL-compliant Ts with our own borrow_object&lt;T&gt;() and &quot;Shm_session::bo...">arena_lend::jemalloc::Session_mv::Borrower_allocator</a>.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">T</td><td>See standard C++ <code>Allocator</code> concept. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a07c9b1803567c2714ae48433e756047f" name="a07c9b1803567c2714ae48433e756047f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07c9b1803567c2714ae48433e756047f">&#9670;&nbsp;</a></span>Arena</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Arena =  typename Base::Base::Impl::Arena</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The arena object on which one may call <code>construct&lt;T&gt;(ctor_args...)</code>, where <code>ctor_args</code> are arguments to the <code>T::T()</code> constructor. </p>
<p >See <a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">shm::classic::Pool_arena</a> class doc header for discussion on appropriate properties of <code>T</code>. Short version for convenience: PODs work; STL nested container+POD combos work, as long as a <a class="el" href="namespaceipc_1_1shm_1_1stl.html" title="ipc::shm sub-module providing integration between STL-compliant components (including containers) and...">shm::stl</a> allocator is used at all levels; manually-implemented non-STL-compliant data structures work if care is taken to use <code>Arena::allocate()</code> and <code>Arena::Pointer</code>.</p>
<p >Suppose <code>A-&gt;construct()</code> yields handle <code>h</code>, where <code>A</code> is any <code>Arena*</code> returned by a <code>*this</code> accessor &ndash; <code>this-&gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a></code>, <code>this-&gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a></code>. Then <code>h</code> can be passed to <code>this-&gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a></code> which yields <code>Blob b</code>. Further, an <code>h</code> returned by <code>s-&gt;borrow_object(b)</code>, executed on the opposing <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">shm::classic::Session_mv</a> s</code> (after receiving <code>b</code> via IPC) shall point to the same location in <code>A</code> and will become part of a cross-process <code>shared_ptr</code> group with the original <code>h</code> (and any copies/moves thereof), <code>*h</code> garbage-collected based on a (conceptual) cross-process ref-count.</p>
<p >Full <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> capabilities are described in the documentation for the alias's target, <a class="el" href="classipc_1_1shm_1_1classic_1_1Pool__arena.html" title="A SHM-classic interface around a single SHM pool with allocation-algorithm services by boost....">shm::classic::Pool_arena</a>. However it is recommended to use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a> on <code>*this</code> <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> impl as opposed to the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>. There are 2 advantages to this:</p><ul>
<li>It is easier: it works regardless of which <code>*this</code>-originated <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> the handle originated (via <code>construct&lt;&gt;()</code>).</li>
<li>It is more generic: other SHM-provider-wrapping <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> impls (as of this writing <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html" title="Implements the SHM-related API common to shm::arena_lend::jemalloc::Server_session and shm::arena_len...">session::shm::arena_lend::jemalloc::Session_mv</a> and its sub-classes <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a></code> and <code>Client_session</code>) features the same <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a> APIs; hence templated code can be written generically around this. The same does not hold if one accesses these features via the "native" <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> API: e.g., the SHM-classic <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> has <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a></code> and <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a></code>, due to its simple symmetric setup; while the SHM-jemalloc <code>Arena</code> does not; it uses a separate/asymmetric class to access borrowing/lending. <dl class="section warning"><dt>Warning</dt><dd><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a> from <code>*this</code> is compatible only with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a> from the same type; and similarly for <code>Arena::borrow_object()</code> and <code>Arena::lend_object()</code>; attempting to mix the APIs for the same <code>Blob</code> will yield undefined behavior.</dd></dl>
<dl class="section see"><dt>See also</dt><dd>Contrasting type pair <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html#ae30ae4b65cd4178fa26eed660688829f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">arena_lend::jemalloc::Session_mv::Arena</a>, <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html#ad63c175a57f314c1ed3d4a78329030cd" title="The lend/borrow engine type which allows one to &quot;lend&quot; a T (obtained via Arena::construct&lt;T&gt;()) to th...">arena_lend::jemalloc::Session_mv::Shm_session</a>. </dd></dl>
</li>
</ul>

</div>
</div>
<a id="aecfab9c96933a832be7d2ad91be33532" name="aecfab9c96933a832be7d2ad91be33532"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aecfab9c96933a832be7d2ad91be33532">&#9670;&nbsp;</a></span>Borrower_allocator</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Borrower_allocator =  <a class="el" href="classipc_1_1shm_1_1stl_1_1Stateless__allocator.html">ipc::shm::stl::Stateless_allocator</a>&lt;T, <a class="el" href="namespaceipc_1_1shm.html#a6c8474d5b7dda220ed1f6693fc2e3c89">ipc::shm::Arena_to_borrower_allocator_arena_t</a>&lt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">Arena</a>&gt; &gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equals <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#aeb1fceac476bc8bd159710b7d01f0fe3" title="Convenience alias to be used in STL-compliant Ts with &quot;Arena::construct&lt;T&gt;()&quot;, our own lend_object&lt;T&gt;...">Allocator</a>; provided for generic programming for algorithms that would use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">classic::Session_mv</a> interchangeably with <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html" title="Implements the SHM-related API common to shm::arena_lend::jemalloc::Server_session and shm::arena_len...">shm::arena_lend::jemalloc::Session_mv</a>. </p>
<p >Can be used in STL-compliant <code>T</code>s with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object&lt;T&gt;()</a> and <code>"Arena::borrow_object&lt;T&gt;()"</code>.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">T</td><td>See standard C++ <code>Allocator</code> concept. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a96f6b597be7cc29f9207df909a4816c4" name="a96f6b597be7cc29f9207df909a4816c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a96f6b597be7cc29f9207df909a4816c4">&#9670;&nbsp;</a></span>Structured_channel</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<div class="memtemplate">
template&lt;typename Message_body &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Structured_channel =  typename <a class="el" href="namespaceipc_1_1transport_1_1struc_1_1shm_1_1classic.html#ac543b500a85f556564e592cbbefb6185">transport::struc::shm::classic::Channel</a>&lt;typename Base::Base::Impl::Session_base_obj::Channel_obj, Message_body&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1Session.html#a29eaaa691a992e3a83662e00be7d7446" title="Convenience alias for the transport::struc::Channel concrete type to use if one desires (1) to upgrad...">Session::Structured_channel</a>: implemented concept. </dd></dl>

</div>
</div>
<a id="a23d60bbc945c72cd6f19fdadd7ce014d" name="a23d60bbc945c72cd6f19fdadd7ce014d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23d60bbc945c72cd6f19fdadd7ce014d">&#9670;&nbsp;</a></span>Structured_msg_builder_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Structured_msg_builder_config =  typename Base::Base::Impl::Structured_msg_builder_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1Session.html#a2612cefeace1ba12e649ba0e509aaab1" title="Convenience alias equal to Structured_channel&lt;M&gt;::Builder_config (regardless of M).">Session::Structured_msg_builder_config</a>: implemented concept. </dd></dl>

</div>
</div>
<a id="a2b27e91465c5dbdefcb12a6913a9ad4c" name="a2b27e91465c5dbdefcb12a6913a9ad4c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2b27e91465c5dbdefcb12a6913a9ad4c">&#9670;&nbsp;</a></span>Structured_msg_reader_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::Structured_msg_reader_config =  typename Base::Base::Impl::Structured_msg_reader_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Implements <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> API per contract. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1session_1_1Session.html#ac23d047087984addf221f0baa0058616" title="Convenience alias equal to Structured_channel&lt;M&gt;::Reader_config (regardless of M).">Session::Structured_msg_reader_config</a>: implemented concept. </dd></dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ac6a4f1fbafb583f37d7586c6a199430f" name="ac6a4f1fbafb583f37d7586c6a199430f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6a4f1fbafb583f37d7586c6a199430f">&#9670;&nbsp;</a></span>app_shm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">::Arena</a> * <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::app_shm</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns SHM <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> with per-app scope, meaning its pool shall be accessible potentially beyond the lifetime of this session but rather until the generating <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a> (i.e., server process) shuts down, by any <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> under that umbrella, now or in the future, as long as its <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> equals that of <code>*this</code> session. </p>
<p >See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> doc header for useful instructions on working with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a>, and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a>.</p>
<h3>If this is the <em>client</em>: Lifetime of returned pointed-to <code>Arena</code> / underlying SHM areas</h3>
<p >Long story short (though reading the <em>server</em> section just below will provide context/background if needed):</p><ul>
<li><code>this-&gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a></code> always returns <code>&amp;A</code>, where <code>A</code> is an <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>. No other object returns the same <code>&amp;A</code>. -<code>A</code> can be accessed until <code>*this</code> session is destroyed. It is impromper (behavior undefined), for code in this process, to access any objects residing in SHM areas <code>A</code> past that point.</li>
</ul>
<p >To expand somewhat: A <code>Client_session</code> dies for one of two reasons if used properly. One, locally triggered: this process is done with IPC (usually planning to terminate gracefully). In this case it's moot: if it's done with IPC, it's done with SHM in this context. Two, triggered by opposing side (<code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a></code>). That means <em>that</em> process is done with IPC (probably planning to terminate gracefully). In that case it's also moot: per-app-scope, or any scope maintained by <a class="el" href="namespaceipc_1_1session.html" title="Flow-IPC module providing the broad lifecycle and shared-resource organization – via the session conc...">ipc::session</a>, does not (by definition) outlive the <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a></code>; and <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a></code> dying is the standard cause of a <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a></code> being destroyed from a server-local trigger.</p>
<p >In other words: from a <em>client</em> point of view, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> are not qualitatively different; they both exist and are mutually segregated, but that's it. Their lifetimes in a given <em>client</em> are the same. Crucially, however, the opposing (<em>server</em>) side can make use of the larger lifetime of the underlying arena. Read on for details:</p>
<h3>If this is the <em>server</em>: Lifetime of returned pointed-to <code>Arena</code> / underlying SHM areas</h3>
<p >(This is subtler than it may appear particularly if one has not worked with SHM pool handles a whole lot.)</p>
<p >(<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>, as of this writing at least, is not copyable. If it becomes copyable then one can "cheat" the below setup by making a copy of the deref of the returned <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> pointer. However let us assume good will.)</p>
<p >We specify above that the lifetime of the underlying pool goes beyond that of <code>*this</code> session unlike <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>. What does that really mean though? A couple of things:</p><ul>
<li>Firstly, it is simply <em>segregated</em> from the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> arena. Hence, if (say) a client writes to the latter, crashing in the middle of it, then the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> area(s) are not affected and conceivably can be used, so (e.g.) maybe certain application logic need not reset/restart/whatever.</li>
<li>Secondly, there's the actual <em>lifetime</em> implications which we discuss next.</li>
</ul>
<p >The facts: The underlying pool behind <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> is <em>removed</em> (on server side) once the session ends. The <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> one, however, is <em>removed</em> only once the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">shm::classic::Session_server</a> goes down (even in case of abrupt termination of its process, the <a class="el" href="namespaceipc_1_1session.html" title="Flow-IPC module providing the broad lifecycle and shared-resource organization – via the session conc...">ipc::session</a> machinery will do the removal ASAP on restart; but we digress; basically its lifetime extends to the end of the "parent" server's).</p>
<p >It is not quite as simple as that, though. The actual RAM is given-back to the OS only once (1) the aforementioned <em>removal</em> has occured; <em>and</em> (2) every <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> in every process that is open w/r/t that same pool has been destroyed (even if its dtor does not run due to abrupt exit, OS will clean it up; but again we digress; just think of it as destroyed via <code>Arena::~Arena()</code>). That is: Each <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> is a pool <em>handle</em>, and they are tracked by the OS in ref-count fashion cross-process; once they all go away, then the removal takes place. Until then any still-existing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> is perfectly functional, as if nothing happened.</p>
<p >So, actually, while the lifetime of the underlying shared RAM is indeed managed by <a class="el" href="namespaceipc_1_1session.html" title="Flow-IPC module providing the broad lifecycle and shared-resource organization – via the session conc...">ipc::session</a> to equal that of the parent <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">shm::classic::Session_server</a>, that lifetime can <em>also</em> be further extended by the mere existence of extant <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> objects in any process. Given that, here are more facts:</p><ul>
<li><code>this-&gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a></code> always returns <code>&amp;A</code>, where <code>A</code> is an <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>. In fact it returns <code>X.app_shm(C)</code>, where <code>C</code> is the <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a> pertaining to <code>*this</code>, and <code>X</code> is the <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> whose <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ac6733bac776ecd2995f41cb0feb81d63" title="Contract identical to simpler session::Session_server::async_accept() overload; but internally ensure...">shm::classic::Session_server::async_accept()</a> loaded <code>*this</code>. <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">shm::classic::Session_server::app_shm()</a> doc header states that it always returns the same non-null value until <code>X</code>'s destruction.<ul>
<li>Thus <code>Y.app_shm()</code> (where <code>Y</code> is any <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a> coming from the same <code>X</code>, and with the same <a class="el" href="classipc_1_1session_1_1Server__session__mv.html#ac873543383b7a6da94d4353231f34ec2" title="The opposing application is described by a Client_app; this is that description.">Server_session_mv::client_app()</a>) also always returns <code>&amp;A</code>, and the <code>A</code> is that very same <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> again. -<code>A</code> can be accessed until the server object <code>X</code> (whose <code>X.async_accept()</code> yielded the contents of <code>*this</code>) is destroyed. It is impromper (behavior undefined) for code in this process to access any objects residing in SHM areas <code>A</code> past that point.</li>
<li>However, crucially, it is both proper and intended that <code>A</code> (along with objects residing therein) is used across 1+ <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a></code>s sharing the same <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a>, all the way up to the death of the parent <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a></code>.</li>
</ul>
</li>
</ul>
<p >To be clear (for a given <a class="el" href="structipc_1_1session_1_1Client__app.html" title="An App that is used as a client in at least one client-server IPC split.">Client_app</a>) it doesn't matter which session object's <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> one uses; it's always the same pointer to the same object living inside <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">shm::classic::Session_server</a>. One can also use <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html#ae3e011716068f4e669bd7eed487cf207" title="Returns pointer to the per-app SHM-arena, whose lifetime extends until *this is destroyed; or null if...">shm::classic::Session_server::app_shm()</a> directly, if that is more convenient, although as of this writing the present <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> is somewhat faster, returning a directly-cached pointer instead of performing a mutex-protected map lookup (internally).</p>
<p ><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> is not copyable; hence there is no way to extend the lifetime of the underlying SHM areas beyond that.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a0fbea0563835e852069cdaab506dd92c" name="a0fbea0563835e852069cdaab506dd92c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fbea0563835e852069cdaab506dd92c">&#9670;&nbsp;</a></span>app_shm_builder_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">::Structured_msg_builder_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::app_shm_builder_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Identical to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a85bb0b948b7b54c06557edd3d03d66bd" title="Returns builder config suitable for capnp-serializing out-messages in SHM arena session_shm().">session_shm_builder_config()</a> but backed by SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> instead of <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a0b7540b33fcedeaba37a3fece1bdec7a" name="a0b7540b33fcedeaba37a3fece1bdec7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0b7540b33fcedeaba37a3fece1bdec7a">&#9670;&nbsp;</a></span>app_shm_lender_session()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;::Structured_msg_builder_config::Builder::Session <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::app_shm_lender_session</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>When transmitting items originating in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a> via <a class="el" href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder.html#a7909a2d1e1d24037fb8af5338fffa783" title="Implements concept API.">transport::struc::shm::Builder::emit_serialization()</a> (and/or <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">transport::struc::Channel</a> send facilities), returns additional-to-payload information necessary to target the opposing process properly. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="aaeeacd92acfefb73ed9af3ef22917f14" name="aaeeacd92acfefb73ed9af3ef22917f14"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaeeacd92acfefb73ed9af3ef22917f14">&#9670;&nbsp;</a></span>app_shm_reader_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">::Structured_msg_reader_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::app_shm_reader_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns reader config counterpart to <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a0fbea0563835e852069cdaab506dd92c" title="Identical to session_shm_builder_config() but backed by SHM arena app_shm() instead of session_shm().">app_shm_builder_config()</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a4223fc944735adb6946a9d1938d06a20" name="a4223fc944735adb6946a9d1938d06a20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4223fc944735adb6946a9d1938d06a20">&#9670;&nbsp;</a></span>borrow_object()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;::Arena::template Handle&lt; T &gt; <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::borrow_object </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3ca151e694dc819205aff5995c16ba76">Blob</a> &amp;&#160;</td>
          <td class="paramname"><em>serialization</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Completes the cross-process operation begun by oppsing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">Session_mv::lend_object()</a> that returned <code>serialization</code>; to be invoked in the intended new owner process which is operating <code>*this</code>. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">T</td><td>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">serialization</td><td>Value, not <code>.empty()</code>, returned by opposing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a>, or by opposing <code>Arena::lend_object()</code>, and transmitted bit-for-bit to this process. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. Never null. </dd></dl>

</div>
</div>
<a id="a794f83a8111428b3b1feec7216f692dd" name="a794f83a8111428b3b1feec7216f692dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a794f83a8111428b3b1feec7216f692dd">&#9670;&nbsp;</a></span>lend_object()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a3ca151e694dc819205aff5995c16ba76">::Blob</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::lend_object </td>
          <td>(</td>
          <td class="paramtype">const typename Arena::template Handle&lt; T &gt; &amp;&#160;</td>
          <td class="paramname"><em>handle</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Adds an owner process to the owner set of the given <code>session_shm-&gt;construct()</code>- or <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a>-&gt;construct()</code>-created handle, and returns an opaque blob, such that if one passes it to opposing <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">Session_mv::borrow_object()</a> in the receiving process, that <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a></code> shall return an equivalent <code>Handle</code> in that process. </p>
<p >The returned <code>Blob</code> is guaranteed to have non-zero size that is small enough to be considered very cheap to copy and hence transmit over IPC.</p>
<p >It is the user's responsibility to transmit the returned blob, such as via a <a class="el" href="classipc_1_1transport_1_1Channel.html" title="Peer to a bundle of 1-2 full-duplex pipe(s), one for transmitting unstructured binary blobs; the othe...">transport::Channel</a>, to the owning process. Failing to do so will leak the object until arena cleanup. (Arena cleanup time depends on the source <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>. If it came from <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>, arena cleanup occurs at <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> destruction. If from <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a>, arena cleanup occurs at <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">Server_session</a> destruction. If a destructor does not run, due to crash/etc., then the leaked <a class="el" href="namespaceipc_1_1session.html" title="Flow-IPC module providing the broad lifecycle and shared-resource organization – via the session conc...">ipc::session</a>-managed <code>Arena</code>s' pools are cleaned the next time a <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__server.html" title="This is to vanilla Session_server what shm::classic::Server_session is to vanilla Server_session: it ...">Session_server</a> is constructed.)</p>
<h3>What it really does</h3>
<p >Omitting certain internal details, it determines which <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> (of <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> or <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a>) <code>handle</code> originated; and then calls <code>A-&gt;lend_object(handle)</code> on that guy and returns that. I mention this for context; it is arguably desirable to not count on these details in code that can generically work with a different SHM-enabled <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a>, such as <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html" title="Implements the SHM-related API common to shm::arena_lend::jemalloc::Server_session and shm::arena_len...">shm::arena_lend::jemalloc::Session_mv</a>, taken as a template param. E.g., <a class="el" href="classipc_1_1session_1_1shm_1_1arena__lend_1_1jemalloc_1_1Session__mv.html#a1346f63d338304a20bef43d3c93c7562" title="Adds an owner process to the owner set of the given Arena::construct()-ed handle; and returns an opaq...">shm::arena_lend::jemalloc::Server_session::lend_object()</a> does not, and cannot (as it does not exist), call any <code>Arena::lend_object()</code>.</p>
<p >However, if your code specifically counts on <code>*this</code> being a <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Server__session.html" title="Identical to session::Server_session in every way, except that it makes available two SHM arenas,...">shm::classic::Server_session</a>, then it is not wrong to rely on this knowledge.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">T</td><td>See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">handle</td><td>Value returned by <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>-&gt;construct&lt;T&gt;()</code> or <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#ac6a4f1fbafb583f37d7586c6a199430f" title="Returns SHM Arena with per-app scope, meaning its pool shall be accessible potentially beyond the lif...">app_shm()</a>-&gt;construct&lt;T&gt;()</code>; or copied/moved therefrom. Note this is a mere <code>shared_ptr&lt;T&gt;</code> albeit with unspecified custom deleter logic attached. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. Never <code>.empty()</code>. </dd></dl>

</div>
</div>
<a id="a9ff21b10fd753fccfa4882834e677ccf" name="a9ff21b10fd753fccfa4882834e677ccf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ff21b10fd753fccfa4882834e677ccf">&#9670;&nbsp;</a></span>session_shm()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f">::Arena</a> * <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::session_shm</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns SHM <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> with per-session-scope, meaning it shall be accessible only during the lifetime of this session, by this <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> (via this accessor) and the opposing <a class="el" href="classipc_1_1session_1_1Session.html" title="A documentation-only concept defining the local side of an IPC conversation (session) with another en...">Session</a> (via its counterpart thereof). </p>
<p >See <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> doc header for useful instructions on working with <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a>, <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a794f83a8111428b3b1feec7216f692dd" title="Adds an owner process to the owner set of the given session_shm-&gt;construct()- or app_shm()-&gt;construct...">lend_object()</a>, and <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a4223fc944735adb6946a9d1938d06a20" title="Completes the cross-process operation begun by oppsing Session_mv::lend_object() that returned serial...">borrow_object()</a>.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a85bb0b948b7b54c06557edd3d03d66bd" name="a85bb0b948b7b54c06557edd3d03d66bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85bb0b948b7b54c06557edd3d03d66bd">&#9670;&nbsp;</a></span>session_shm_builder_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a23d60bbc945c72cd6f19fdadd7ce014d">::Structured_msg_builder_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::session_shm_builder_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns builder config suitable for capnp-serializing out-messages in SHM arena <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a3af67219e611f450402824e5b8b162d6" name="a3af67219e611f450402824e5b8b162d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3af67219e611f450402824e5b8b162d6">&#9670;&nbsp;</a></span>session_shm_lender_session()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;::Structured_msg_builder_config::Builder::Session <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::session_shm_lender_session</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>When transmitting items originating in <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a07c9b1803567c2714ae48433e756047f" title="The arena object on which one may call construct&lt;T&gt;(ctor_args...), where ctor_args are arguments to t...">Arena</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> via <a class="el" href="classipc_1_1transport_1_1struc_1_1shm_1_1Builder.html#a7909a2d1e1d24037fb8af5338fffa783" title="Implements concept API.">transport::struc::shm::Builder::emit_serialization()</a> (and/or <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">transport::struc::Channel</a> send facilities), returns additional-to-payload information necessary to target the opposing process properly. </p>
<p >Internally: Since <code>*this</code> type is based on the arena-sharing SHM-provider type (SHM-classic), this is simply <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a9ff21b10fd753fccfa4882834e677ccf" title="Returns SHM Arena with per-session-scope, meaning it shall be accessible only during the lifetime of ...">session_shm()</a> itself. Generic code of yours should not need to rely on that impl detail, but we mention it for education/context.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<a id="a9e73c65e57a4de3811613763da3c628b" name="a9e73c65e57a4de3811613763da3c628b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9e73c65e57a4de3811613763da3c628b">&#9670;&nbsp;</a></span>session_shm_reader_config()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt;<a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html#a2b27e91465c5dbdefcb12a6913a9ad4c">::Structured_msg_reader_config</a> <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">ipc::session::shm::classic::Session_mv</a>&lt; Session_t &gt;::session_shm_reader_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns reader config counterpart to the opposing <code>Session::session_shm_builder_config()</code> and <code>Session::session_shm_lender_session()</code>. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="aea882d38a00f81a98d6604e300c5a01a" name="aea882d38a00f81a98d6604e300c5a01a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aea882d38a00f81a98d6604e300c5a01a">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Session_t &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html">Session_mv</a>&lt; Session_t &gt; &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <code><a class="el" href="classipc_1_1session_1_1shm_1_1classic_1_1Session__mv.html" title="Implements the SHM-related API common to shm::classic::Server_session and shm::classic::Client_sessio...">Session_mv</a></code> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">val</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>session/shm/classic/<a class="el" href="session_2shm_2classic_2classic__fwd_8hpp.html">classic_fwd.hpp</a></li>
<li>session/shm/classic/<a class="el" href="ipc__shm_2src_2ipc_2session_2shm_2classic_2session_8hpp.html">session.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 11 2025 20:02:23 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
